package com.zzy.stringorarray;

import java.util.ArrayList;

/**
 * 6. N 字形变换
 * 将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
 * 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："PAHNAPLSIIGYIR"。
 */
public class L6convert {
    public String convert(String s, int numRows) {
        if (numRows < 2) {
            return s;
        }
        //每一行的string builder
        ArrayList<StringBuilder> builders = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            builders.add(new StringBuilder());
        }
        //行坐标是1234321，带拐弯，定义一个flag
        int index = 0, flag = 1;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            builders.get(index).append(c);
            index += flag;
            if (index == 0 || index == numRows - 1) {
                flag = -flag;
            }
        }
        StringBuilder res = new StringBuilder();
        for (StringBuilder sb : builders) {
            res.append(sb);
        }
        return res.toString();
    }
}
